Added api to reset the im context in GtkTextView and GtkEntry
authorJavier Jardón <jjardon@gnome.org>
Tue, 4 May 2010 23:16:55 +0000 (01:16 +0200)
committerJavier Jardón <jjardon@gnome.org>
Wed, 5 May 2010 01:14:28 +0000 (03:14 +0200)
Also, added api to allow an input method to internally handle
key press and release events in the GtkTextView and GtkEntry
cases.
This is simply a wrapper to the gtk_im_context_filter_keypress()
function, but It's added to not access the ->im_context
directly.
Based on a Christian Dywan patch

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=163251

docs/reference/gtk/gtk-sections.txt
gtk/gtk.symbols
gtk/gtkentry.c
gtk/gtkentry.h
gtk/gtktextview.c
gtk/gtktextview.h

index 684b30db998fcc39e3821ef06b9367d5eaf75b92..692b05f201778bae80b8b34b8e076b68b2937aeb 100644 (file)
@@ -1316,6 +1316,8 @@ gtk_entry_get_progress_fraction
 gtk_entry_set_progress_pulse_step
 gtk_entry_get_progress_pulse_step
 gtk_entry_progress_pulse
+gtk_entry_im_context_filter_keypress
+gtk_entry_reset_im_context
 GtkEntryIconPosition
 gtk_entry_set_icon_from_pixbuf
 gtk_entry_set_icon_from_stock
@@ -4129,6 +4131,8 @@ gtk_text_view_get_tabs
 gtk_text_view_set_accepts_tab
 gtk_text_view_get_accepts_tab
 gtk_text_view_get_default_attributes
+gtk_text_view_im_context_filter_keypress
+gtk_text_view_reset_im_context
 GTK_TEXT_VIEW_PRIORITY_VALIDATE
 <SUBSECTION Standard>
 GTK_TEXT_VIEW
index a285bfde05d6d07c68af587b44856668d88d9fe7..2e1b8f7da5630783b346266d58d05dccabf2a0ed 100644 (file)
@@ -1384,10 +1384,12 @@ gtk_entry_get_type G_GNUC_CONST
 gtk_entry_get_visibility
 gtk_entry_get_width_chars
 gtk_entry_get_text_window
+gtk_entry_im_context_filter_keypress
 gtk_entry_layout_index_to_text_index
 gtk_entry_new
 gtk_entry_new_with_buffer
 gtk_entry_progress_pulse
+gtk_entry_reset_im_context
 gtk_entry_set_activates_default
 gtk_entry_set_alignment
 gtk_entry_set_buffer
@@ -4286,12 +4288,14 @@ gtk_text_view_get_visible_rect
 gtk_text_view_get_window
 gtk_text_view_get_window_type
 gtk_text_view_get_wrap_mode
+gtk_text_view_im_context_filter_keypress
 gtk_text_view_move_child
 gtk_text_view_move_mark_onscreen
 gtk_text_view_move_visually
 gtk_text_view_new
 gtk_text_view_new_with_buffer
 gtk_text_view_place_cursor_onscreen
+gtk_text_view_reset_im_context
 gtk_text_view_scroll_mark_onscreen
 gtk_text_view_scroll_to_iter
 gtk_text_view_scroll_to_mark
index 20653b4fca105b0793c294d35d21abb9b4b75997..066fd9cb8a4fe63e4e1fd496e862813dad09b60c 100644 (file)
@@ -5807,6 +5807,55 @@ _gtk_entry_reset_im_context (GtkEntry *entry)
     }
 }
 
+/**
+ * gtk_entry_reset_im_context:
+ * @entry: a #GtkEntry
+ *
+ * Reset the input method context of the entry if needed.
+ *
+ * This can be necessary in the case where modifying the buffer
+ * would confuse on-going input method behavior.
+ *
+ * Since: 2.22
+ */
+void
+gtk_entry_reset_im_context (GtkEntry *entry)
+{
+  g_return_if_fail (GTK_IS_ENTRY (entry));
+
+  _gtk_entry_reset_im_context (entry);
+}
+
+/**
+ * gtk_entry_im_context_filter_keypress:
+ * @entry: a #GtkEntry
+ * @event: the key event
+ *
+ * Allow the #GtkEntry input method to internally handle key press
+ * and release events. If this function returns %TRUE, then no further
+ * processing should be done for this key event. See
+ * gtk_im_context_filter_keypress().
+ *
+ * Note that you are expected to call this function from your handler
+ * when overriding key event handling. This is needed in the case when
+ * you need to insert your own key handling between the input method
+ * and the default key event handling of the #GtkEntry.
+ * See gtk_text_view_reset_im_context() for an example of use.
+ *
+ * Return value: %TRUE if the input method handled the key event.
+ *
+ * Since: 2.22
+ */
+gboolean
+gtk_entry_im_context_filter_keypress (GtkEntry    *entry,
+                                      GdkEventKey *key)
+{
+  g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE);
+
+  return gtk_im_context_filter_keypress (entry->im_context, key);
+}
+
+
 static gint
 gtk_entry_find_position (GtkEntry *entry,
                         gint      x)
index 0c82c63224c7fb0fade18878ef3570d62846c2a4..e2044959a6583d9669ade2d449bfe144bd125346 100644 (file)
@@ -306,6 +306,10 @@ gint         gtk_entry_get_current_icon_drag_source      (GtkEntry             *
 GdkWindow  * gtk_entry_get_icon_window                   (GtkEntry             *entry,
                                                           GtkEntryIconPosition  icon_pos);
 
+gboolean    gtk_entry_im_context_filter_keypress         (GtkEntry             *entry,
+                                                          GdkEventKey          *key);
+void        gtk_entry_reset_im_context                   (GtkEntry             *entry);
+
 
 /* Deprecated compatibility functions
  */
index e28610127d45348e0031a8f118cd0305760429f2..f12621d4ec85e84621271d3aebc88c37b4add77f 100644 (file)
@@ -297,7 +297,6 @@ static void     gtk_text_view_set_attributes_from_style (GtkTextView        *tex
 static void     gtk_text_view_ensure_layout          (GtkTextView        *text_view);
 static void     gtk_text_view_destroy_layout         (GtkTextView        *text_view);
 static void     gtk_text_view_check_keymap_direction (GtkTextView        *text_view);
-static void     gtk_text_view_reset_im_context       (GtkTextView        *text_view);
 static void     gtk_text_view_start_selection_drag   (GtkTextView        *text_view,
                                                       const GtkTextIter  *iter,
                                                       GdkEventButton     *event);
@@ -6574,9 +6573,22 @@ gtk_text_view_destroy_layout (GtkTextView *text_view)
     }
 }
 
-static void
+/**
+ * gtk_text_view_reset_im_context:
+ * @text_view: a #GtkTextView
+ *
+ * Reset the input method context of the text view if needed.
+ *
+ * This can be necessary in the case where modifying the buffer
+ * would confuse on-going input method behavior.
+ *
+ * Since: 2.22
+ */
+void
 gtk_text_view_reset_im_context (GtkTextView *text_view)
 {
+  g_return_if_fail (GTK_IS_TEXT_VIEW (text_view));
+
   if (text_view->need_im_reset)
     {
       text_view->need_im_reset = FALSE;
@@ -6584,6 +6596,51 @@ gtk_text_view_reset_im_context (GtkTextView *text_view)
     }
 }
 
+/**
+ * gtk_text_view_im_context_filter_keypress:
+ * @text_view: a #GtkTextView
+ * @event: the key event
+ *
+ * Allow the #GtkTextView input method to internally handle key press
+ * and release events. If this function returns %TRUE, then no further
+ * processing should be done for this key event. See
+ * gtk_im_context_filter_keypress().
+ *
+ * Note that you are expected to call this function from your handler
+ * when overriding key event handling. This is needed in the case when
+ * you need to insert your own key handling between the input method
+ * and the default key event handling of the #GtkTextView.
+ *
+ * |[
+ * static gboolean
+ * gtk_foo_bar_key_press_event (GtkWidget   *widget,
+ *                              GdkEventKey *event)
+ * {
+ *   if ((key->keyval == GDK_Return || key->keyval == GDK_KP_Enter))
+ *     {
+ *       if (gtk_text_view_im_context_filter_keypress (GTK_TEXT_VIEW (view), event))
+ *         return TRUE;
+ *     }
+ *
+ *     /&ast; Do some stuff &ast;/
+ *
+ *   return GTK_WIDGET_CLASS (gtk_foo_bar_parent_class)->key_press_event (widget, event);
+ * }
+ * ]|
+ *
+ * Return value: %TRUE if the input method handled the key event.
+ *
+ * Since: 2.22
+ */
+gboolean
+gtk_text_view_im_context_filter_keypress (GtkTextView  *text_view,
+                                          GdkEventKey  *key)
+{
+  g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE);
+
+  return gtk_im_context_filter_keypress (text_view->im_context, key);
+}
+
 /*
  * DND feature
  */
index 5fe62bac9afecd1e1f20031cbfc029f3190ef532..dca0c88a78aa45baaccc727f3c2d9456accfe24d 100644 (file)
@@ -307,6 +307,10 @@ gboolean gtk_text_view_move_visually                  (GtkTextView       *text_v
                                                        GtkTextIter       *iter,
                                                        gint               count);
 
+gboolean        gtk_text_view_im_context_filter_keypress        (GtkTextView       *text_view,
+                                                                 GdkEventKey       *key);
+void            gtk_text_view_reset_im_context                  (GtkTextView       *text_view);
+
 /* Adding child widgets */
 void gtk_text_view_add_child_at_anchor (GtkTextView          *text_view,
                                         GtkWidget            *child,